<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>日期格式化</title>
    <script src="../js/moment.js"></script>
    <script src="../js/jquery-3.4.1.js"></script>
    <!--
        1. 官方文档: http://momentjs.cn/docs/#/parsing/
    -->
</head>
<body>

</body>
<script>

    $(() => {
        createChinaMoment();
        timestampToString();
        getMomentYearOrMonthOrDay();
        setMomentYearOrMonthOrDay();
        useStringIsParams();
    });

    /**
     * 功能:
     *      使用moment获取今天的时间并格式化为指定的字符串.
     * 说明:
     *      日期格式和java中的类似.
     */
    function createChinaMoment() {
        moment.locale("zh-cn");
        let today = moment();
        console.log(today.format("YYYY年MM月DD日"));
    }

    /**
     * 功能:
     *      将任意的时间戳转换为字符串.
     * 说明:
     *      日期格式和java中的类似.
     */
    function timestampToString() {
        moment.locale("zh-cn");
        let t1 = moment(1411641720000).format('YYYY-MM-DD HH:mm:ss');
        console.log(t1);
    }

    /**
     * 功能:
     *      获取指定日期的年月日.
     * 说明:
     *      1. today.month()从0开始, 当前月要加1.
     *      2. today.date()获取的是当月的日.
     */
    function getMomentYearOrMonthOrDay() {
        moment.locale("zh-cn");
        let today = moment();

        //today.month()从0开始, 当前月要加1.
        console.log(today.year(), today.month() + 1, today.date());
    }

    /**
     * 功能:
     *      设置moment的年月日时分秒产生固定格式的时间.
     * 说明:
     *      1. month字段从0开始, 所以设置时需要减1.
     *      2. second接受 0 到 59 之间的数字或者字符串。 如果超出范围，则它将会冒泡到分钟。
     *      3. minute接受 0 到 59 之间的数字或者字符串。 如果超出范围，则它将会冒泡到小时。
     *      4. hour接受 0 到 23 之间的数字或者字符串。 如果超出范围，则它将会冒泡到日期。
     *      5. date接受 1 到 31 之间的数字或者字符串。 如果超出范围，则它将会冒泡达到月份。
     *          - Moment#date 是月份的日期，而 Moment#day 是星期几。
     *      6. day此方法可用于设置星期几，其中星期日为 0、星期六为 6。
     *
     */
    function setMomentYearOrMonthOrDay() {
        moment.locale("zh-cn");
        let date = moment();

        date.year('1995');
        date.month('7');
        date.date('9');

        date.hour('0');
        date.minute('0');
        date.second('0');

        console.log(date.format('YYYY-MM-DD HH:mm:ss'), "星期数:", date.day());
    }

    /**
     * 功能:
     *      以String作为moment的参数.
     * 说明:
     *      1. 当从字符串创建 moment 时，需要首先检查字符串是否与已知的 ISO 8601 格式匹配，如果未找到已知的格式，则在降维到 new Date(string)
     *      之前检查字符串是否与 RFC 2822 日期时间格式匹配。
     *      2. moment(String, String)这样子接受2个字符串参数时, 第一个是待转换的时间字符串, 第二个参数是解析这个字符串的格式.
     */
    function useStringIsParams() {
        let date = moment('1995-08-09');
        console.log(date.format('YYYY-MM-DD HH:mm:ss'));

        let date1 = moment('1995年11月09日', 'YYYY年MM月DD日');
        console.log(date1.format('YYYY-MM-DD HH:mm:ss'));
    }


</script>
</html>